package cn.zhejianglao.shirotemplate.service.user.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import cn.zhejianglao.shirotemplate.common.model.UserVO;


/**
 * account mapper
 *
 * @author zefengwang
 */

@Mapper
public interface IUserMapper {

    /**
     * get entry by id
     *
     * @param username the username
     * @return entry
     */
    UserVO selectByUsername(@Param("username") String username);

    /**
     * check if username exist
     *
     * @param username the username
     * @return number of usernames {0. 1}
     */
    int selectCountByUsername(@Param("username") String username);

    /**
     * 新增用户
     *
     * @param userVO 用户对象
     */
    void insert(UserVO userVO);

    /**
     * 根据用户名获取当前角色id
     *
     * @param username 用户名
     * @return 当前角色id
     */
    Long selectCurrentRoleIdByUsername(@Param("username") String username);

    /**
     * 获取角色id数量
     *
     * @param roleId 角色id
     * @return 数量
     */
    int selectCountByRoleId(@Param("roleId") Long roleId);

    /**
     * 更新当前角色id
     *
     * @param username      用户名
     * @param currentRoleId 当前角色id
     */
    void updateCurrentRoleIdToFirstByUsername(@Param("username") String username, @Param("roleId") Long currentRoleId);

    /**
     * 根据用户id查询数量
     *
     * @param userId 用户id
     * @return 数量
     */
    int selectCountById(@Param("userId") Long userId);

    /**
     * 根据用户id更新当前角色id
     *
     * @param roleId 角色id
     * @param userId 用户id
     */
    void updateCurrentRoleIdByUserId(@Param("roleId") Long roleId, @Param("userId") Long userId);

    /**
     * 更新用户
     *
     * @param userVO 用户对象
     */
    void update(UserVO userVO);

    /**
     * 根据 id 获取
     *
     * @param userId id
     * @return 数据
     */
    UserVO selectById(@Param("userId") Long userId);

    /**
     * 根据 id 删除
     *
     * @param userId user id
     */
    void deleteById(@Param("userId") Long userId);
}
